package com.mobile.service.enums;

/**
 * 工单状态流转事件枚举
 * 定义工单在不同状态间流转时触发的事件类型
 */
public enum WorkOrderEvent {
    
    /**
     * 提交审核事件
     * 流转说明：申请人完成工单填写后，将工单提交给相关部门进行审核
     * 触发条件：工单状态为"已申报"(SUBMITTED)
     * 流转路径：已申报状态(SUBMITTED) → 审核中状态(AUDITING)
     * 业务含义：工单正式进入审核流程，申请人无法再修改工单内容
     */
    SUBMIT_AUDIT("SUBMIT_AUDIT", "提交审核"),
    
    /**
     * 进入审核事件
     * 流转说明：重新分派后的工单被审核人员接收，开始进行审核处理
     * 触发条件：工单状态为"待重分派"(RE_DISPATCH)
     * 流转路径：待重分派状态(RE_DISPATCH) → 审核中状态(AUDITING)
     * 业务含义：重新分派的工单被新的审核人员接收，开始审核流程
     */
    ENTER_AUDIT("ENTER_AUDIT", "进入审核"),
    
    /**
     * 审核完成事件
     * 流转说明：审核人员完成工单审核，工单通过审核流程
     * 触发条件：工单状态为"审核中"(AUDITING)且审核人员确认通过
     * 流转路径：审核中状态(AUDITING) → 已完成状态(COMPLETED)
     * 业务含义：工单审核通过，流程正常结束
     */
    COMPLETE_AUDIT("COMPLETE_AUDIT", "审核完成"),
    
    /**
     * 需要补正事件
     * 流转说明：审核过程中发现工单信息不完整或有误，需要申请人补充完善
     * 触发条件：工单状态为"审核中"(AUDITING)且审核人员发现需要补正的问题
     * 流转路径：审核中状态(AUDITING) → 需补正状态(NEED_CORRECT)
     * 业务含义：工单暂停审核，退回给申请人进行信息补正
     */
    NEED_CORRECTION("NEED_CORRECTION", "需要补正"),
    
    /**
     * 需要协办事件
     * 流转说明：审核过程中需要其他部门或人员协助处理
     * 触发条件：工单状态为"审核中"(AUDITING)且需要多部门协同处理
     * 流转路径：审核中状态(AUDITING) → 协办中状态(COLLABORATING)
     * 业务含义：工单需要多个部门协同处理，进入协办流程
     */
    NEED_COLLABORATION("NEED_COLLABORATION", "需要协办"),
    
    /**
     * 审核不通过事件
     * 流转说明：审核人员审核后认为工单不符合要求，拒绝通过
     * 触发条件：工单状态为"审核中"(AUDITING)且审核人员确认不通过
     * 流转路径：审核中状态(AUDITING) → 已驳回状态(REJECTED)
     * 业务含义：工单审核失败，流程结束
     */
    REJECT_AUDIT("REJECT_AUDIT", "审核不通过"),
    
    /**
     * 需要重分派事件
     * 流转说明：当前审核人员无法处理该工单，需要重新分配给其他人员
     * 触发条件：工单状态为"审核中"(AUDITING)且当前处理人员申请重新分派
     * 流转路径：审核中状态(AUDITING) → 待重分派状态(RE_DISPATCH)
     * 业务含义：工单需要重新分配处理人员，可能涉及部门调整或专业技能匹配
     */
    NEED_REDISPATCH("NEED_REDISPATCH", "需要重分派"),
    
    /**
     * 补正完成事件
     * 流转说明：申请人完成工单信息补正，重新提交审核
     * 触发条件：工单状态为"需补正"(NEED_CORRECT)且申请人完成信息补充
     * 流转路径：需补正状态(NEED_CORRECT) → 审核中状态(AUDITING)
     * 业务含义：工单信息已补正完成，重新进入审核流程
     */
    COMPLETE_CORRECTION("COMPLETE_CORRECTION", "补正完成"),
    
    /**
     * 协办完成事件
     * 流转说明：协办部门完成协办任务，工单可以继续原审核流程
     * 触发条件：工单状态为"协办中"(COLLABORATING)且所有协办任务完成
     * 流转路径：协办中状态(COLLABORATING) → 审核中状态(AUDITING)
     * 业务含义：协办流程结束，工单回到主审核流程继续处理
     */
    COMPLETE_COLLABORATION("COMPLETE_COLLABORATION", "协办完成"),
    
    /**
     * 协办需要补正事件
     * 流转说明：协办过程中发现需要申请人补充相关信息
     * 触发条件：工单状态为"协办中"(COLLABORATING)且协办人员发现需要补正的问题
     * 流转路径：协办中状态(COLLABORATING) → 需补正状态(NEED_CORRECT)
     * 业务含义：协办流程暂停，需要申请人提供更多信息后继续协办
     */
    COLLABORATION_NEED_CORRECTION("COLLABORATION_NEED_CORRECTION", "协办需要补正");

    private final String code;
    private final String description;

    WorkOrderEvent(String code, String description) {
        this.code = code;
        this.description = description;
    }

    public String getCode() {
        return code;
    }

    public String getDescription() {
        return description;
    }
}